home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / timeplt.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  17KB  |  469 lines

  1. /***************************************************************************
  2.  
  3. Time Pilot memory map (preliminary)
  4.  
  5. driver by Nicola Salmoria
  6.  
  7. Main processor memory map.
  8. 0000-5fff ROM
  9. a000-a3ff Color RAM
  10. a400-a7ff Video RAM
  11. a800-afff RAM
  12. b000-b7ff sprite RAM (only areas 0xb010 and 0xb410 are used).
  13.  
  14. memory mapped ports:
  15.  
  16. read:
  17. c000      video scan line. This is used by the program to multiplex the cloud
  18.           sprites, drawing them twice offset by 128 pixels.
  19. c200      DSW2
  20. c300      IN0
  21. c320      IN1
  22. c340      IN2
  23. c360      DSW1
  24.  
  25. write:
  26. c000      command for the audio CPU
  27. c200      watchdog reset
  28. c300      interrupt enable
  29. c302      flip screen
  30. c304      trigger interrupt on audio CPU
  31. c308      Protection ???  Stuffs in some values computed from ROM content
  32. c30a      coin counter 1
  33. c30c      coin counter 2
  34.  
  35. interrupts:
  36. standard NMI at 0x66
  37.  
  38. SOUND BOARD:
  39. same as Pooyan
  40.  
  41. ***************************************************************************/
  42.  
  43. #include "driver.h"
  44. #include "vidhrdw/generic.h"
  45.  
  46.  
  47. extern unsigned char *timeplt_videoram,*timeplt_colorram;
  48.  
  49. void init_timeplt(void);
  50. void init_psurge(void);
  51. READ_HANDLER( timeplt_scanline_r );
  52. WRITE_HANDLER( timeplt_videoram_w );
  53. WRITE_HANDLER( timeplt_colorram_w );
  54. WRITE_HANDLER( timeplt_flipscreen_w );
  55. int  timeplt_vh_start(void);
  56. void timeplt_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
  57. void timeplt_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  58.  
  59. /* defined in sndhrdw/timeplt.c */
  60. extern struct MemoryReadAddress timeplt_sound_readmem[];
  61. extern struct MemoryWriteAddress timeplt_sound_writemem[];
  62. extern struct AY8910interface timeplt_ay8910_interface;
  63. WRITE_HANDLER( timeplt_sh_irqtrigger_w );
  64.  
  65.  
  66.  
  67. static WRITE_HANDLER( timeplt_coin_counter_w )
  68. {
  69.     coin_counter_w(offset >> 1, data);
  70. }
  71.  
  72. static READ_HANDLER( psurge_protection_r )
  73. {
  74.     return 0x80;
  75. }
  76.  
  77.  
  78.  
  79. static struct MemoryReadAddress readmem[] =
  80. {
  81.     { 0x0000, 0x5fff, MRA_ROM },
  82.     { 0x6004, 0x6004, psurge_protection_r },    /* psurge only */
  83.     { 0xa000, 0xbfff, MRA_RAM },
  84.     { 0xc000, 0xc000, timeplt_scanline_r },
  85.     { 0xc200, 0xc200, input_port_4_r },    /* DSW2 */
  86.     { 0xc300, 0xc300, input_port_0_r },    /* IN0 */
  87.     { 0xc320, 0xc320, input_port_1_r },    /* IN1 */
  88.     { 0xc340, 0xc340, input_port_2_r },    /* IN2 */
  89.     { 0xc360, 0xc360, input_port_3_r },    /* DSW1 */
  90.     { -1 }    /* end of table */
  91. };
  92.  
  93. static struct MemoryWriteAddress writemem[] =
  94. {
  95.     { 0x0000, 0x5fff, MWA_ROM },
  96.     { 0xa000, 0xa3ff, timeplt_colorram_w, &timeplt_colorram },
  97.     { 0xa400, 0xa7ff, timeplt_videoram_w, &timeplt_videoram },
  98.     { 0xa800, 0xafff, MWA_RAM },
  99.     { 0xb010, 0xb03f, MWA_RAM, &spriteram, &spriteram_size },
  100.     { 0xb410, 0xb43f, MWA_RAM, &spriteram_2 },
  101.     { 0xc000, 0xc000, soundlatch_w },
  102.     { 0xc200, 0xc200, watchdog_reset_w },
  103.     { 0xc300, 0xc300, interrupt_enable_w },
  104.     { 0xc302, 0xc302, timeplt_flipscreen_w },
  105.     { 0xc304, 0xc304, timeplt_sh_irqtrigger_w },
  106.     { 0xc30a, 0xc30c, timeplt_coin_counter_w },  /* c30b is not used */
  107.     { -1 }    /* end of table */
  108. };
  109.  
  110.  
  111. INPUT_PORTS_START( timeplt )
  112.     PORT_START    /* IN0 */
  113.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
  114.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
  115.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
  116.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
  117.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
  118.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  119.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  120.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  121.  
  122.     PORT_START    /* IN1 */
  123.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
  124.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  125.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
  126.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
  127.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  128.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  129.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  130.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  131.  
  132.     PORT_START    /* IN2 */
  133.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
  134.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
  135.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
  136.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
  137.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
  138.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  139.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  140.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  141.  
  142.     PORT_START    /* DSW0 */
  143.     PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) )
  144.     PORT_DIPSETTING(    0x02, DEF_STR( 4C_1C ) )
  145.     PORT_DIPSETTING(    0x05, DEF_STR( 3C_1C ) )
  146.     PORT_DIPSETTING(    0x08, DEF_STR( 2C_1C ) )
  147.     PORT_DIPSETTING(    0x04, DEF_STR( 3C_2C ) )
  148.     PORT_DIPSETTING(    0x01, DEF_STR( 4C_3C ) )
  149.     PORT_DIPSETTING(    0x0f, DEF_STR( 1C_1C ) )
  150.     PORT_DIPSETTING(    0x03, DEF_STR( 3C_4C ) )
  151.     PORT_DIPSETTING(    0x07, DEF_STR( 2C_3C ) )
  152.     PORT_DIPSETTING(    0x0e, DEF_STR( 1C_2C ) )
  153.     PORT_DIPSETTING(    0x06, DEF_STR( 2C_5C ) )
  154.     PORT_DIPSETTING(    0x0d, DEF_STR( 1C_3C ) )
  155.     PORT_DIPSETTING(    0x0c, DEF_STR( 1C_4C ) )
  156.     PORT_DIPSETTING(    0x0b, DEF_STR( 1C_5C ) )
  157.     PORT_DIPSETTING(    0x0a, DEF_STR( 1C_6C ) )
  158.     PORT_DIPSETTING(    0x09, DEF_STR( 1C_7C ) )
  159.     PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
  160.     PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) )
  161.     PORT_DIPSETTING(    0x20, DEF_STR( 4C_1C ) )
  162.     PORT_DIPSETTING(    0x50, DEF_STR( 3C_1C ) )
  163.     PORT_DIPSETTING(    0x80, DEF_STR( 2C_1C ) )
  164.     PORT_DIPSETTING(    0x40, DEF_STR( 3C_2C ) )
  165.     PORT_DIPSETTING(    0x10, DEF_STR( 4C_3C ) )
  166.     PORT_DIPSETTING(    0xf0, DEF_STR( 1C_1C ) )
  167.     PORT_DIPSETTING(    0x30, DEF_STR( 3C_4C ) )
  168.     PORT_DIPSETTING(    0x70, DEF_STR( 2C_3C ) )
  169.     PORT_DIPSETTING(    0xe0, DEF_STR( 1C_2C ) )
  170.     PORT_DIPSETTING(    0x60, DEF_STR( 2C_5C ) )
  171.     PORT_DIPSETTING(    0xd0, DEF_STR( 1C_3C ) )
  172.     PORT_DIPSETTING(    0xc0, DEF_STR( 1C_4C ) )
  173.     PORT_DIPSETTING(    0xb0, DEF_STR( 1C_5C ) )
  174.     PORT_DIPSETTING(    0xa0, DEF_STR( 1C_6C ) )
  175.     PORT_DIPSETTING(    0x90, DEF_STR( 1C_7C ) )
  176.     PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
  177.     PORT_START    /* DSW1 */
  178.     PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
  179.     PORT_DIPSETTING(    0x03, "3" )
  180.     PORT_DIPSETTING(    0x02, "4" )
  181.     PORT_DIPSETTING(    0x01, "5" )
  182.     PORT_BITX( 0,       0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "255", IP_KEY_NONE, IP_JOY_NONE )
  183.     PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) )
  184.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  185.     PORT_DIPSETTING(    0x04, DEF_STR( Cocktail ) )
  186.     PORT_DIPNAME( 0x08, 0x08, "Bonus" )
  187.     PORT_DIPSETTING(    0x08, "10000 50000" )
  188.     PORT_DIPSETTING(    0x00, "20000 60000" )
  189.     PORT_DIPNAME( 0x70, 0x70, DEF_STR( Difficulty ) )
  190.     PORT_DIPSETTING(    0x70, "1 (Easiest)" )
  191.     PORT_DIPSETTING(    0x60, "2" )
  192.     PORT_DIPSETTING(    0x50, "3" )
  193.     PORT_DIPSETTING(    0x40, "4" )
  194.     PORT_DIPSETTING(    0x30, "5 (Average)" )
  195.     PORT_DIPSETTING(    0x20, "6" )
  196.     PORT_DIPSETTING(    0x10, "7" )
  197.     PORT_DIPSETTING(    0x00, "8 (Hardest)" )
  198.     PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )
  199.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  200.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  201. INPUT_PORTS_END
  202.  
  203. INPUT_PORTS_START( psurge )
  204.     PORT_START    /* IN0 */
  205.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
  206.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
  207.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
  208.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
  209.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
  210.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  211.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  212.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  213.  
  214.     PORT_START    /* IN1 */
  215.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
  216.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  217.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
  218.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
  219.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  220.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  221.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  222.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  223.  
  224.     PORT_START    /* IN2 */
  225.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
  226.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
  227.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
  228.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
  229.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
  230.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  231.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  232.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  233.  
  234.     PORT_START /* DSW0 */
  235.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
  236.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  237.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  238.     PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
  239.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  240.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  241.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
  242.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  243.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  244.     PORT_DIPNAME( 0x08, 0x08, "Initial Energy" )
  245.     PORT_DIPSETTING(    0x00, "4" )
  246.     PORT_DIPSETTING(    0x08, "6" )
  247.     PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )
  248.     PORT_DIPSETTING(    0x30, "3" )
  249.     PORT_DIPSETTING(    0x20, "4" )
  250.     PORT_DIPSETTING(    0x10, "5" )
  251.     PORT_DIPSETTING(    0x00, "6" )
  252.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
  253.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  254.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  255.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) )
  256.     PORT_DIPSETTING(    0x80, DEF_STR( Upright ) )
  257.     PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
  258.  
  259.     PORT_START /* DSW1 */
  260.     PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) )
  261.     PORT_DIPSETTING(    0x02, DEF_STR( 2C_1C ) )
  262.     PORT_DIPSETTING(    0x03, DEF_STR( 1C_1C ) )
  263.     PORT_DIPSETTING(    0x01, DEF_STR( 1C_3C ) )
  264.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_5C ) )
  265.     PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) )
  266.     PORT_DIPSETTING(    0x08, DEF_STR( 2C_1C ) )
  267.     PORT_DIPSETTING(    0x0c, DEF_STR( 1C_1C ) )
  268.     PORT_DIPSETTING(    0x04, DEF_STR( 1C_3C ) )
  269.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_5C ) )
  270.     PORT_BITX(0x10,     0x10, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Infinite Shots", IP_KEY_NONE, IP_JOY_NONE )
  271.     PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
  272.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  273.     PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
  274.     PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
  275.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  276.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
  277.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  278.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  279.     PORT_DIPNAME( 0x80, 0x00, "Stop at Junctions" )
  280.     PORT_DIPSETTING(    0x80, DEF_STR( No ) )
  281.     PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
  282. INPUT_PORTS_END
  283.  
  284.  
  285.  
  286. static struct GfxLayout charlayout =
  287. {
  288.     8,8,    /* 8*8 characters */
  289.     512,    /* 512 characters */
  290.     2,    /* 2 bits per pixel */
  291.     { 4, 0 },
  292.     { 0, 1, 2, 3, 8*8+0,8*8+1,8*8+2,8*8+3 },
  293.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
  294.     16*8    /* every char takes 16 consecutive bytes */
  295. };
  296. static struct GfxLayout spritelayout =
  297. {
  298.     16,16,    /* 16*16 sprites */
  299.     256,    /* 256 sprites */
  300.     2,    /* 2 bits per pixel */
  301.     { 4, 0 },
  302.     { 0, 1, 2, 3,  8*8, 8*8+1, 8*8+2, 8*8+3,
  303.             16*8+0, 16*8+1, 16*8+2, 16*8+3,  24*8+0, 24*8+1, 24*8+2, 24*8+3 },
  304.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  305.             32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8 },
  306.     64*8    /* every sprite takes 64 consecutive bytes */
  307. };
  308.  
  309.  
  310. static struct GfxDecodeInfo gfxdecodeinfo[] =
  311. {
  312.     { REGION_GFX1, 0, &charlayout,        0, 32 },
  313.     { REGION_GFX2, 0, &spritelayout,   32*4, 64 },
  314.     { -1 } /* end of array */
  315. };
  316.  
  317.  
  318.  
  319. static struct MachineDriver machine_driver_timeplt =
  320. {
  321.     /* basic machine hardware */
  322.     {
  323.         {
  324.             CPU_Z80,
  325.             3072000,    /* 3.072 Mhz (?) */
  326.             readmem,writemem,0,0,
  327.             nmi_interrupt,1
  328.         },
  329.         {
  330.             CPU_Z80 | CPU_AUDIO_CPU,
  331.             14318180/8,    /* 1.789772727 MHz */                        \
  332.             timeplt_sound_readmem,timeplt_sound_writemem,0,0,
  333.             ignore_interrupt,1    /* interrupts are triggered by the main CPU */
  334.         }
  335.     },
  336.     60, DEFAULT_60HZ_VBLANK_DURATION,    /* frames per second, vblank duration */
  337.     1,    /* 1 CPU slice per frame - interleaving is forced when a sound command is written */
  338.     0,
  339.  
  340.     /* video hardware */
  341.     32*8, 32*8, { 0*8, 32*8-1, 2*8, 30*8-1 },
  342.     gfxdecodeinfo,
  343.     32,32*4+64*4,
  344.     timeplt_vh_convert_color_prom,
  345.  
  346.     VIDEO_TYPE_RASTER,
  347.     0,
  348.     timeplt_vh_start,
  349.     0,
  350.     timeplt_vh_screenrefresh,
  351.  
  352.     /* sound hardware */
  353.     0,0,0,0,
  354.     {
  355.         {
  356.             SOUND_AY8910,
  357.             &timeplt_ay8910_interface
  358.         }
  359.     }
  360. };
  361.  
  362.  
  363.  
  364. /***************************************************************************
  365.  
  366.   Game driver(s)
  367.  
  368. ***************************************************************************/
  369.  
  370. ROM_START( timeplt )
  371.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  372.     ROM_LOAD( "tm1",          0x0000, 0x2000, 0x1551f1b9 )
  373.     ROM_LOAD( "tm2",          0x2000, 0x2000, 0x58636cb5 )
  374.     ROM_LOAD( "tm3",          0x4000, 0x2000, 0xff4e0d83 )
  375.  
  376.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for the audio CPU */
  377.     ROM_LOAD( "tm7",          0x0000, 0x1000, 0xd66da813 )
  378.  
  379.     ROM_REGION( 0x2000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  380.     ROM_LOAD( "tm6",          0x0000, 0x2000, 0xc2507f40 )
  381.  
  382.     ROM_REGION( 0x4000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  383.     ROM_LOAD( "tm4",          0x0000, 0x2000, 0x7e437c3e )
  384.     ROM_LOAD( "tm5",          0x2000, 0x2000, 0xe8ca87b9 )
  385.  
  386.     ROM_REGION( 0x0240, REGION_PROMS )
  387.     ROM_LOAD( "timeplt.b4",   0x0000, 0x0020, 0x34c91839 ) /* palette */
  388.     ROM_LOAD( "timeplt.b5",   0x0020, 0x0020, 0x463b2b07 ) /* palette */
  389.     ROM_LOAD( "timeplt.e9",   0x0040, 0x0100, 0x4bbb2150 ) /* sprite lookup table */
  390.     ROM_LOAD( "timeplt.e12",  0x0140, 0x0100, 0xf7b7663e ) /* char lookup table */
  391. ROM_END
  392.  
  393. ROM_START( timepltc )
  394.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  395.     ROM_LOAD( "cd1y",         0x0000, 0x2000, 0x83ec72c2 )
  396.     ROM_LOAD( "cd2y",         0x2000, 0x2000, 0x0dcf5287 )
  397.     ROM_LOAD( "cd3y",         0x4000, 0x2000, 0xc789b912 )
  398.  
  399.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for the audio CPU */
  400.     ROM_LOAD( "tm7",          0x0000, 0x1000, 0xd66da813 )
  401.  
  402.     ROM_REGION( 0x2000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  403.     ROM_LOAD( "tm6",          0x0000, 0x2000, 0xc2507f40 )
  404.  
  405.     ROM_REGION( 0x4000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  406.     ROM_LOAD( "tm4",          0x0000, 0x2000, 0x7e437c3e )
  407.     ROM_LOAD( "tm5",          0x2000, 0x2000, 0xe8ca87b9 )
  408.  
  409.     ROM_REGION( 0x0240, REGION_PROMS )
  410.     ROM_LOAD( "timeplt.b4",   0x0000, 0x0020, 0x34c91839 ) /* palette */
  411.     ROM_LOAD( "timeplt.b5",   0x0020, 0x0020, 0x463b2b07 ) /* palette */
  412.     ROM_LOAD( "timeplt.e9",   0x0040, 0x0100, 0x4bbb2150 ) /* sprite lookup table */
  413.     ROM_LOAD( "timeplt.e12",  0x0140, 0x0100, 0xf7b7663e ) /* char lookup table */
  414. ROM_END
  415.  
  416. ROM_START( spaceplt )
  417.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  418.     ROM_LOAD( "sp1",          0x0000, 0x2000, 0xac8ca3ae )
  419.     ROM_LOAD( "sp2",          0x2000, 0x2000, 0x1f0308ef )
  420.     ROM_LOAD( "sp3",          0x4000, 0x2000, 0x90aeca50 )
  421.  
  422.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for the audio CPU */
  423.     ROM_LOAD( "tm7",          0x0000, 0x1000, 0xd66da813 )
  424.  
  425.     ROM_REGION( 0x2000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  426.     ROM_LOAD( "sp6",          0x0000, 0x2000, 0x76caa8af )
  427.  
  428.     ROM_REGION( 0x4000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  429.     ROM_LOAD( "sp4",          0x0000, 0x2000, 0x3781ce7a )
  430.     ROM_LOAD( "tm5",          0x2000, 0x2000, 0xe8ca87b9 )
  431.  
  432.     ROM_REGION( 0x0240, REGION_PROMS )
  433.     ROM_LOAD( "timeplt.b4",   0x0000, 0x0020, 0x34c91839 ) /* palette */
  434.     ROM_LOAD( "timeplt.b5",   0x0020, 0x0020, 0x463b2b07 ) /* palette */
  435.     ROM_LOAD( "timeplt.e9",   0x0040, 0x0100, 0x4bbb2150 ) /* sprite lookup table */
  436.     ROM_LOAD( "timeplt.e12",  0x0140, 0x0100, 0xf7b7663e ) /* char lookup table */
  437. ROM_END
  438.  
  439. ROM_START( psurge )
  440.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  441.     ROM_LOAD( "p1",           0x0000, 0x2000, 0x05f9ba12 )
  442.     ROM_LOAD( "p2",           0x2000, 0x2000, 0x3ff41576 )
  443.     ROM_LOAD( "p3",           0x4000, 0x2000, 0xe8fe120a )
  444.  
  445.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for the audio CPU */
  446.     ROM_LOAD( "p6",           0x0000, 0x1000, 0xb52d01fa )
  447.     ROM_LOAD( "p7",           0x1000, 0x1000, 0x9db5c0ce )
  448.  
  449.     ROM_REGION( 0x2000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  450.     ROM_LOAD( "p4",           0x0000, 0x2000, 0x26fd7f81 )
  451.  
  452.     ROM_REGION( 0x4000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  453.     ROM_LOAD( "p5",           0x0000, 0x2000, 0x6066ec8e )
  454.     ROM_LOAD( "tm5",          0x2000, 0x2000, 0xe8ca87b9 )
  455.  
  456.     ROM_REGION( 0x0240, REGION_PROMS )
  457.     ROM_LOAD( "timeplt.b4",   0x0000, 0x0020, 0x00000000 ) /* palette */
  458.     ROM_LOAD( "timeplt.b5",   0x0020, 0x0020, 0x00000000 ) /* palette */
  459.     ROM_LOAD( "timeplt.e9",   0x0040, 0x0100, 0x00000000 ) /* sprite lookup table */
  460.     ROM_LOAD( "timeplt.e12",  0x0140, 0x0100, 0x00000000 ) /* char lookup table */
  461. ROM_END
  462.  
  463.  
  464.  
  465. GAME( 1982, timeplt,  0,       timeplt, timeplt, timeplt, ROT270, "Konami", "Time Pilot" )
  466. GAME( 1982, timepltc, timeplt, timeplt, timeplt, timeplt, ROT270, "Konami (Centuri license)", "Time Pilot (Centuri)" )
  467. GAME( 1982, spaceplt, timeplt, timeplt, timeplt, timeplt, ROT270, "bootleg", "Space Pilot" )
  468. GAME( 1988, psurge,   0,       timeplt, psurge,  psurge,  ROT90,  "<unknown>", "Power Surge" )
  469.